home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / spoc88.zip / TBTASM.ZIP / TBQPA.ASM < prev   
Assembly Source File  |  1988-06-14  |  2KB  |  49 lines

  1. ;TBQPA.ASM  Fast screen write routine for Turbo Basic
  2. CODE    SEGMENT
  3.     ASSUME    CS:CODE,DS:CODE
  4.     PUSH      BP             ;Save BP
  5.     MOV       BP,SP          ;Get stack address
  6. ;Get arguments
  7.     LES       BX,[BP+0AH]    ;Get addr of Col variable
  8.     MOV       DI,ES:[BX]     ;Put Col number in DI
  9.     DEC       DI             ;Change Col # to 0 - 79
  10.     LES       BX,[BP+0EH]    ;Get addr of Row variable
  11.     MOV       AX,ES:[BX]     ;Put Row # in AX
  12.     DEC       AX             ;Change to 0 - 25
  13.     LES       BX,[BP+12H]    ;Get addr of string pointer
  14.     MOV       CX,ES:[BX]     ;Put string length in CL
  15.     AND       CX,7FFFH       ;Remove high bit
  16.     CMP       CX,00          ;Is it zero?
  17.     JZ        QUIT           ;Yes, quit
  18.     MOV       SI,ES:[BX+02]  ;Put string start addr in SI
  19. ;Compute offset into video buffer
  20.     MOV       DX,0050H       ;Num of char per row
  21.     MUL       DX             ;# rows times 80
  22.     ADD       DI,AX          ;Add column number
  23.     SHL       DI,1           ;Multiply by 2
  24. ;Get video parameters
  25.     LES       BX,[BP+06]     ;Get address of attribute
  26.     MOV       BX,ES:[BX]     ;Put attribute in BX
  27.     MOV       AX,0B000H      ;Video buffer addr, mono
  28.     MOV       ES,AX          ;Put it in ES
  29.     MOV       AH,0FH         ;Read video mode
  30.     INT       10H
  31.     CMP       AL,7           ;Is it mono?
  32.     JE        A
  33.     MOV       AX,0B800H      ;Video buffer addr, mono
  34.     MOV       ES,AX          ;Put it in ES
  35. A:      PUSH      DS             ;Save DS on stack
  36. ;Copy data to video buffer
  37.     MOV       DS,DS:[00]     ;Get string segment
  38.     CLD                      ;Clear direction flag
  39. B:      MOVSB                    ;Send 1 byte to buffer
  40.     MOV       BYTE PTR ES:[DI],BL ;Attribute byte
  41.     INC       DI             ;Skip attribute byte
  42.     LOOP      B              ;Loop until done
  43. ;Clean up and leave
  44.           POP       DS             ;Restore DS
  45. QUIT:   POP       BP             ;Restore BP
  46. CODE    ENDS                     ;TB runtime handles return
  47.     END
  48.  
  49.